\documentclass[format=sigconf]{acmart}
\usepackage[utf8]{inputenc}

\def\inputfig#1{\input #1}
\def\inputtex#1{\input #1}
\def\inputal#1{\input #1}
\def\inputcode#1{\input #1}

\inputtex{logos.tex}
\inputtex{refmacros.tex}
\inputtex{other-macros.tex}

\acmConference[ELS'19]{the 12th European Lisp Symposium}{April 01--02 2019}{%
  Genova, Italy}
\acmISBN{978-2-9557474-3-8}
\acmDOI{10.5281/zenodo.2634314}
\startPage{56}
\setcopyright{rightsretained}
\copyrightyear{2019}

\begin{document}
\title{Bootstrapping \commonlisp{} using \commonlisp{}}

\author{Irène Durand
}
\email{irene.durand@u-bordeaux.fr}

\author{Robert Strandh}
\email{robert.strandh@u-bordeaux.fr}

\affiliation{
  \institution{LaBRI, University of Bordeaux}
  \streetaddress{351 cours de la libération}
  \city{Talence}
  \country{France}}

\begin{abstract}
Some \commonlisp{} implementations evolve through careful
modifications to an existing \emph{image}.  Most of the remaining
implementations are bootstrapped using some lower-level language,
typically \clanguage{}.  As far as we know, only \sbcl{} is
bootstrapped from source code written mainly in \commonlisp{}.  But,
in most cases, there is no profound reason for using a language other
than \commonlisp{} for creating a \commonlisp{} system, though there
are some annoying details that have to be dealt with.

We describe the bootstrapping technique used with \sicl{},
% \footnote{https://github.com/robert-strandh/SICL},
a modern
implementation of \commonlisp{}.  Though both \sicl{} and the
bootstrapping procedure for creating it are still being worked on, they
are sufficiently evolved that the big picture outlined in this paper
will remain valid.  Our technique uses \emph{first-class global
  environments} to isolate the host environment from the environments
required during the bootstrapping procedure.  Contrary to \sbcl{}, and
implementations written in some other language, in \sicl{}, we build
the \clos{} MOP%
classes and generic functions \emph{first}.  This
technique allows us to use the \clos{} machinery for many other parts
of the system, thereby decreasing the amount of special-purpose code,
and improving maintainability of the system.
\end{abstract}

\begin{CCSXML}
<ccs2012>
<concept>
<concept_id>10011007.10011006.10011041</concept_id>
<concept_desc>Software and its engineering~Compilers</concept_desc>
<concept_significance>500</concept_significance>
</concept>
<concept>
<concept_id>10011007.10011006.10011008.10011009.10011021</concept_id>
<concept_desc>Software and its engineering~Multiparadigm languages</concept_desc>
<concept_significance>300</concept_significance>
</concept>
</ccs2012>
\end{CCSXML}

\ccsdesc[500]{Software and its engineering~Compilers}
\ccsdesc[300]{Software and its engineering~Multiparadigm languages}

\keywords{\clos{}, \commonlisp{}, Compilation, Bootstrapping}

\maketitle


\inputtex{sec-introduction.tex}
\inputtex{sec-previous.tex}
\inputtex{sec-sicl.tex}
\inputtex{sec-our-method.tex}
\inputtex{sec-benefits.tex}
\inputtex{sec-conclusions.tex}
\inputtex{sec-acknowledgments.tex}

\bibliographystyle{plainnat}
%\bibliographystyle{abbrv}
\bibliography{bootstrapping}
\end{document}
